    /**
 * 
 */
package core.interfaces;

import core.descriptors.TaskDescriptor;
import core.descriptors.WorkerDescriptor;
import core.worker.Address;

/**
 * Interfaccia per Discovery, contiene i metodi che per forza devono essere implementati nelle specializzazioni di Discovery
 * L'entità discovery contiene la lista dei worker di sua conoscenza ed effettua l'accoppiamento worker - TaskDescriptor
 * @author Vincenzo Merlo, Scuderi Giovanni Luca, Paolo Giuffrida
 *
 */
public interface Discovery {
    /**
     * Dato un TaskDescriptor ritorna un worker adatto
     * @param td TaskDescriptor
     * @return Indirizzo del Worker adatto ad eseguire il TaskDescriptor
     */
    public Address getWorker(TaskDescriptor td);
        /**
         * Aggiorna lo stato del Worker nel WorkerDiscovery
         * @param index
         * @param wd
         * @return stato di aggiornamento. 1 se è andata bene l'update, ErrorCode altrimenti
         * @see  Error
         */
        public int updateWorker(int index, WorkerDescriptor wd);
        /**
         * Aggiunge un Worker alla lista dei Worker conosciuti
         * @param wd WorkerDescriptor associato al worker
         * @return posizione/ID del Worker nel discovery
         */
        public int addWorker(WorkerDescriptor wd);
}
